package com.example.feign.fallback.factory;

import com.example.bean.User;
import com.example.feign.UserService;
import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;

/**
 * @Author 刘武贵
 * @Date 2024-03-03 19:09
 * @Description 功能描述：用户微服务容错Factory 容错扩展
 */
@Component
/**
 * 定义一个用户服务的容错工厂类，实现FallbackFactory接口，用于在Hystrix断路器打开或服务提供者不可用时，
 * 提供一个回退方案（Fallback）。
 */
public class UserServiceFallBackFactory implements FallbackFactory<UserService> {
    /**
     * 创建UserService的回退实例
     * @param cause 异常对象，表示导致服务降级或失败的原因
     * @return 返回一个UserService接口的实现实例，用于提供回退逻辑
     */
    @Override
    public UserService create(Throwable cause) {
        // 创建一个匿名内部类，实现UserService接口，提供默认的回退逻辑
        return new UserService() {
            /**
             * 获取用户信息的回退实现
             * @param uid 用户ID
             * @return 返回一个用户对象，如果实际获取失败，则返回一个ID为-1的虚拟用户对象
             */
            @Override
            public User getUser(Long uid) {
                // 创建用户对象
                User user = new User();
                // 设置一个默认的错误ID，以示区别于真实用户
                user.setId(-1L);
                return user;
            }
        };
    }
}
